import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../names.dart';
import '../../services/index.dart';

/// 认证中间件 - 检查用户登录状态
/// 
/// 🔒 核心功能：
/// - 自动检查用户登录状态
/// - 未登录用户重定向到登录页面
/// - 保存原始访问路由，登录后可返回
/// - 避免循环重定向问题
class AuthMiddleware extends GetMiddleware {
  static const String tag = 'AuthMiddleware';
  
  @override
  int? get priority => 1; // 设置高优先级

  @override
  RouteSettings? redirect(String? route) {
    try {
      debugPrint('🔍 $tag: 检查页面访问权限: $route');
      
      // 获取用户服务检查登录状态
      if (!Get.isRegistered<UserService>()) {
        debugPrint('❌ $tag: UserService未注册，重定向到登录页面');
        return const RouteSettings(name: RouteNames.systemLogin);
      }
      
      final userService = Get.find<UserService>();
      
      // 检查用户是否已登录
      if (!userService.isLoggedIn) {
        debugPrint('🔒 $tag: 用户未登录，重定向到登录页面');
        debugPrint('🔗 $tag: 原始路由: $route');
        
        // 保存原始路由，登录成功后可以返回
        if (route != null && route != RouteNames.systemLogin) {
          final storageService = Get.find<StorageService>();
          storageService.setString('redirect_route', route);
          debugPrint('💾 $tag: 已保存重定向路由: $route');
        }
        
        // 重定向到登录页面
        return const RouteSettings(name: RouteNames.systemLogin);
      }
      
      debugPrint('✅ $tag: 用户已登录，允许访问: $route');
      return null; // 返回null表示允许访问
      
    } catch (e) {
      debugPrint('❌ $tag: 认证中间件错误: $e');
      // 发生错误时重定向到登录页面
      return const RouteSettings(name: RouteNames.systemLogin);
    }
  }

  @override
  GetPage? onPageCalled(GetPage? page) {
    debugPrint('📄 $tag: 中间件处理页面调用: ${page?.name}');
    return super.onPageCalled(page);
  }

  @override
  List<Bindings>? onBindingsStart(List<Bindings>? bindings) {
    debugPrint('🔗 $tag: 中间件绑定开始');
    return super.onBindingsStart(bindings);
  }

  @override
  GetPageBuilder? onPageBuildStart(GetPageBuilder? page) {
    debugPrint('🏗️ $tag: 中间件页面构建开始');
    return super.onPageBuildStart(page);
  }
}
